package dominio

import daos.SessionManager
import excepciones.NuevaPasswordInvalida
import excepciones.UsuarioNoExiste
import excepciones.UsuarioYaExisteException
import java.util.Date
import org.junit.Assert
import org.junit.Before
import org.junit.Test

class SistemaTest{

	Sistema s
	Usuario u
	Usuario u2
	Usuario u3
	Usuario u4
	
	@Before
	def void setUp() throws Exception{
		s= new Sistema
		var utilDate = new Date(); //fecha actual
  		var lnMilisegundos = utilDate.getTime()
  		var sqlDate = new java.sql.Date(lnMilisegundos)
		u= new Usuario("unNombre", "unApellido", "userName", "unPassword","unMail", sqlDate)
		u2= new Usuario("unNombre", "unApellido", "otroUserName", "unPassword","unMail", sqlDate)
		u3= new Usuario("unNombre", "unApellido", "otroMasUserName", "unPassword","unMail", sqlDate)
		u4= new Usuario("Alguien", "unApellido", "nombreUsuario", "unPassword","unMail", sqlDate)
	}
	
	@Test
	def void testRegistrarUsuario() throws UsuarioYaExisteException{
		s.registrarUsuario(u2)
		Assert.assertTrue(u2.password != 0)
	}
	
	@Test(expected= UsuarioYaExisteException)
	def void testRegistrarUsuarioException(){
		s.registrarUsuario(u)
		s.registrarUsuario(u)
	}
	
	@Test
	def void testIngresarUsuario() throws UsuarioNoExiste{
		s.registrarUsuario(u3)
		var uRes= s.ingresarUsuario(u3.nombreUsuario, u3.password)
		Assert.assertTrue(u3.nombreUsuario == uRes.nombreUsuario)
		Assert.assertTrue(u3.apellido == uRes.apellido)
	}
	
	@Test(expected= UsuarioNoExiste)
	def void testIngresarUsuarioException(){
		s.ingresarUsuario("NoExisto", "unPass")
	}
	
	@Test 
	def void testCambiarPassword() throws NuevaPasswordInvalida{
		var nuevaPassword= "nuevaPassword"
		s.cambiarPassword("otroMasUserName", "unPassword", "nuevaPassword")
		var uAux= s.ingresarUsuario(u3.nombreUsuario, nuevaPassword)
		Assert.assertTrue(uAux.password == nuevaPassword)
	}
	
	@Test(expected= NuevaPasswordInvalida)
	def void testCambiarPasswordException(){
		s.cambiarPassword("userName", "unPassword", "unPassword")
	}
	
	@Test
	def void testValidarCuenta(){
		//s.registrarUsuario(u4)
		/*var session= SessionManager.getSessionFactory.openSession
		var q= session.createQuery("FROM Usuario WHERE nombreUsuario = "+u4.nombreUsuario +" and usuario.valido = true")
		var usuario= q.uniqueResult
		Assert.assertTrue(usuario == null)	
		s.validarCuenta(u4.codValidacion)
		q= SessionManager.getSession().createQuery("FROM USUARIOS WHERE usuario ="+u4.nombreUsuario +"AND valido = true")
		var usuario= q.uniqueResult
		Assert.assertTrue(usuario != null)*/
	}
}